Kinesis Firehoseを使ってAWS WAF の包括的なログ記録をS3へ出力する
こんにちは、yagiです。
先々週くらいは暖かかったドイツですが、また今週は寒さが舞い戻っています。 春が待ち遠しい今日この頃です。
本日は、先日作成したCloudFrontディストリビューションにAWS WAFを導入したのに引き続き、 AWS WAFのログをKinesis Firehoseを使ってS3へ出力します。
Kinesis Data Firehose でAWS WAF の包括的なログ記録を設定する
[AWS WAFのログをFirehoseでS3に出力しブロックログをS3Selectで確認してみた](https://dev.classmethod.jp/articles/awf-waf-comprehensive-logging/)
Amazon S3 にログを保存するように AWS WAF の包括的なログ記録を設定する方法を教えてください。
同じリージョン内の Amazon S3 バケットを宛先とする Amazon Kinesis Data Firehose ストリームを使用して、ウェブアクセスコントロールリスト(web ACL)で包括的なログ記録を有効にできます。 そのためには、次の 3 つの AWS のサービスを使用する必要があります。
ログを作成するために AWS WAF
ログを受け取るために Kinesis Data Firehose
ログを保存するために Amazon S3
注: AWS WAF、Kinesis Data Firehose、および Amazon S3 は同じリージョンで実行されている必要があります。
Kinesis Data Firehose を作成する
AWS マネジメントコンソールから、「Kinesis」を選択します。 リージョンの選択ですが、この後作成するログ保管先のS3バケットと合わせる必要があります。 「Kinesis Data Firehose」を選択し、「配信ストリームを作成」を押下します。
「Create delivery stream」から作成する配信ストリームについて設定を行います。 Delivery stream nameについては、「aws-waf-logs-」で始まり任意のサフィックスで終わる名前を入力します。 Sourceは、「Direct PUT or other sources」を指定します。 その他はデフォルトの内容のまま、「Next」を押下して次画面遷移します。
レコード変換、レコード形式の変換は今回はしないのでデフォルトのまま「無効」にします。
DestinationでAmazon S3を選択します。 なお、もっと大量のログを分析目的で使用したい場合は、Amazon RedshiftやAmazon Elasticsearchを検討することもあるかと思います。
S3側で最初に「Kinesis」を選択した際と同じリージョンでS3バケットを作成しておきます。 S3 bucketの選択で、「Create new」から作成もできます。 既に作成済みのS3バケットを使いたい場合は、リストから選択します。
GZIPを有効にし、その他はデフォルト設定としました。
Reviewで確認し、「Create delivery stream」を押下します。 配信ストリームにストリームが作成されたことを確認します。
AWS WAF を Kinesis Data Firehose に関連付ける
AWSコンソールからAWS WAFに移動し、Web ACLsを右ペインから選択、Global (CloudFront)をリストから選択して、対象のWeb ACLを押下します。 Logging and metricsタブを選択し、「Enable logging」を押下します。
ここで先ほど作成したFirehoseの配信ストリームを指定するのですが、表示されないことが発覚。
原因を調査していたところ、以下のブログに記載されていた通り、 「リージョンをバージニア北部に変えて、Firehoseを作り直し」したところ、無事表示されました。
[CloudFrontのログをAWS WAF + FirehoseでS3に送信しようとしてハマった話](https://dev.classmethod.jp/articles/sendcflog-tos3/)
Select a delivery streamから「aws-waf-logs-test」を選択し、「Enable logging」を押下します。
Loggingが「Enabled」になったことを確認します。
これで設定完了です。
結論
先日導入したAWS WAFについて、Kinesis FirehoseでS3へ出力設定するところまでを紹介しました。
AWS WAFの対象がCloudFrontのログをS3に出力する場合には、Firehoseをバージニア北部で作成しなければならないので注意が必要でした。
AWS Kinesisについて、詳しい内容は以下の公式ドキュメントをご参照ください。